home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / endo / mem.c < prev    next >
C/C++ Source or Header  |  1995-05-12  |  6KB  |  227 lines

  1. /*************************************************************************
  2.  *                                                                       *
  3.  *  Copyright (c) 1992, 1993 Ronald Joe Record                           *
  4.  *                                                                       *
  5.  *  All rights reserved. No part of this program or publication may be   *
  6.  *  reproduced, transmitted, transcribed, stored in a retrieval system,  *
  7.  *  or translated into any language or computer language, in any form or *
  8.  *  by any means, electronic, mechanical, magnetic, optical, chemical,   *
  9.  *  biological, or otherwise, without the prior written permission of:   *
  10.  *                                                                       *
  11.  *      Ronald Joe Record (408) 458-3718                                 *
  12.  *      212 Owen St., Santa Cruz, California 95062 USA                   *
  13.  *                                                                       *
  14.  *************************************************************************/
  15.  
  16. #include <stdio.h>
  17. #include <values.h>
  18. #include "x.h"
  19.  
  20. int **histarray;
  21. int maxhist = 0;
  22. int minhist = MAXINT;
  23.  
  24. void
  25. FreeHist()
  26. {
  27.     static int i, j;
  28.  
  29.     if (thermometer)
  30.         j = trawidth - THERMWIDTH;
  31.     else
  32.         j = trawidth;
  33.     for (i=0; i<j; i++)
  34.         free(histarray[i]);
  35.     free(histarray);
  36.     maxhist = 0;
  37.     minhist = MAXINT;
  38. }
  39.  
  40. void
  41. FreeCrit()
  42. {
  43.     if (crit_pts[0])
  44.         free(crit_pts[0]);
  45.     if (crit_pts[1])
  46.         free(crit_pts[1]);
  47.     if (crit_arc[0])
  48.         free(crit_arc[0]);
  49.     if (crit_arc[1])
  50.         free(crit_arc[1]);
  51.     if (n_crit_pts[0])
  52.         free(n_crit_pts[0]);
  53.     if (n_crit_pts[1])
  54.         free(n_crit_pts[1]);
  55.     if (n_crit_arc[0])
  56.         free(n_crit_arc[0]);
  57.     if (n_crit_arc[1])
  58.         free(n_crit_arc[1]);
  59. }
  60.  
  61. freemem()
  62. {
  63.     static int i;
  64.  
  65.     freecoords();
  66.     for (i=0; i<MAXFRAMES; i++) {
  67.         free(indices[i]);
  68.         free(periods[i]);
  69.         free(basins[i]);
  70.     }
  71.     if (histogram)
  72.         FreeHist();
  73.     if (critical)
  74.         FreeCrit();
  75. }
  76.  
  77. void
  78. HistoMem()
  79. {
  80.     static int i, j, k;
  81.  
  82.     if (thermometer)
  83.         k = trawidth - THERMWIDTH;
  84.     else
  85.         k = trawidth;
  86.     if ((histarray=
  87.         (int **)malloc(sizeof(int)*k))==NULL){
  88.         fprintf(stderr,"Error malloc'ing x histarray array.\n");
  89.         fprintf(stderr,"trawidth=%d\n",k);
  90.         exit(-1);
  91.     }
  92.     for (i=0;i<k;i++)
  93.         if ((histarray[i]=
  94.             (int *)malloc(sizeof(int)*traheight))==NULL){
  95.                 fprintf(stderr,"Error malloc'ing x histarray array.\n");
  96.                 fprintf(stderr,"traheight=%d\n",traheight);
  97.                 exit(-1);
  98.         }
  99.     for (i=0;i<traheight;i++)
  100.         for (j=0;j<k;j++)
  101.             histarray[j][i] = 0;
  102. }
  103.  
  104. void
  105. CritiMem()
  106. {
  107.     static int k;
  108.  
  109.     if (thermometer)
  110.         k = criwidth - THERMWIDTH;
  111.     else
  112.         k = criwidth;
  113.     if ((crit_pts[0]=
  114.         (double *)malloc(sizeof(double)*k*criheight))==NULL){
  115.         fprintf(stderr,"Error malloc'ing x crit_pts array.\n");
  116.         fprintf(stderr,"criwidth=%d criheight=%d\n",k,criheight);
  117.         exit(-1);
  118.     }
  119.     if ((crit_pts[1]=
  120.         (double *)malloc(sizeof(double)*k*criheight))==NULL){
  121.         fprintf(stderr,"Error malloc'ing y crit_pts array.\n");
  122.         fprintf(stderr,"criwidth=%d criheight=%d\n",k,criheight);
  123.         exit(-1);
  124.     }
  125.     if ((crit_arc[0]=
  126.         (double *)malloc(sizeof(double)*k*criheight))==NULL){
  127.         fprintf(stderr,"Error malloc'ing x crit_arc array.\n");
  128.         fprintf(stderr,"criwidth=%d criheight=%d\n",k,criheight);
  129.         exit(-1);
  130.     }
  131.     if ((crit_arc[1]=
  132.         (double *)malloc(sizeof(double)*k*criheight))==NULL){
  133.         fprintf(stderr,"Error malloc'ing y crit_arc array.\n");
  134.         fprintf(stderr,"criwidth=%d criheight=%d\n",k,criheight);
  135.         exit(-1);
  136.     }
  137.     if ((n_crit_pts[0]=
  138.         (double *)malloc(sizeof(double)*k*criheight))==NULL){
  139.         fprintf(stderr,"Error malloc'ing x n_crit_pts array.\n");
  140.         fprintf(stderr,"criwidth=%d criheight=%d\n",k,criheight);
  141.         exit(-1);
  142.     }
  143.     if ((n_crit_pts[1]=
  144.         (double *)malloc(sizeof(double)*k*criheight))==NULL){
  145.         fprintf(stderr,"Error malloc'ing y n_crit_pts array.\n");
  146.         fprintf(stderr,"criwidth=%d criheight=%d\n",k,criheight);
  147.         exit(-1);
  148.     }
  149.     if ((n_crit_arc[0]=
  150.         (double *)malloc(sizeof(double)*k*criheight))==NULL){
  151.         fprintf(stderr,"Error malloc'ing x n_crit_arc array.\n");
  152.         fprintf(stderr,"criwidth=%d criheight=%d\n",k,criheight);
  153.         exit(-1);
  154.     }
  155.     if ((n_crit_arc[1]=
  156.         (double *)malloc(sizeof(double)*k*criheight))==NULL){
  157.         fprintf(stderr,"Error malloc'ing y n_crit_arc array.\n");
  158.         fprintf(stderr,"criwidth=%d criheight=%d\n",k,criheight);
  159.         exit(-1);
  160.     }
  161. }
  162.  
  163. setupmem()
  164. {
  165.     static int i, j;
  166.  
  167.     if (thermometer)
  168.         j = width - THERMWIDTH;
  169.     else
  170.         j = width;
  171.     for (i=0;i<MAXFRAMES;i++) {
  172.         if((indices[i]=
  173.             (int *)malloc(sizeof(int)*j*height))==NULL){
  174.             fprintf(stderr,"Error malloc'ing indices array.\n");
  175.             fprintf(stderr,"width=%d height=%d\n",j,height);
  176.             exit(-1);
  177.         }
  178.         if((periods[i]=
  179.             (int *)malloc(sizeof(int)*j*height))==NULL){
  180.             fprintf(stderr,"Error malloc'ing periods array.\n");
  181.             fprintf(stderr,"width=%d height=%d\n",j,height);
  182.             exit(-1);
  183.         }
  184.         if((basins[i]=
  185.             (int *)malloc(sizeof(int)*j*height))==NULL){
  186.             fprintf(stderr,"Error malloc'ing basins array.\n");
  187.             fprintf(stderr,"width=%d height=%d\n",j,height);
  188.             exit(-1);
  189.         }
  190.     }
  191.     setupcoords();
  192.     if (histogram)
  193.         HistoMem();
  194.     if (critical)
  195.         CritiMem();
  196. }
  197.  
  198. setupcoords()
  199. {
  200.     static int i;
  201.  
  202.     for (i=0;i<MAXFRAMES;i++) {
  203.         if ((coords[i][0]=
  204.             (double *)malloc(sizeof(double)*dwell))==NULL){
  205.             fprintf(stderr,"Error malloc'ing x coords array.\n");
  206.             fprintf(stderr,"dwell=%d\n",dwell);
  207.             exit(-1);
  208.         }
  209.         if ((coords[i][1]=
  210.             (double *)malloc(sizeof(double)*dwell))==NULL){
  211.             fprintf(stderr,"Error malloc'ing y coords array.\n");
  212.             fprintf(stderr,"dwell=%d\n",dwell);
  213.             exit(-1);
  214.         }
  215.     }
  216. }
  217.  
  218. freecoords()
  219. {
  220.     static int i;
  221.  
  222.     for (i=0; i<MAXFRAMES; i++) {
  223.         free(coords[i][0]);
  224.         free(coords[i][1]);
  225.     }
  226. }
  227.